一个不带插件的flask应用4 -- flask-filter
由于接触的第一个web框架是django和django-rest-framework, 体会到了django-filter的妙处, 所以在开发flask项目的时候, 想自己做一个
本filter基于Peewee, 但是可以很容易的扩展到sqlalchemy.
filter的组成部分:
- filter_fields -- 因为字段的类型不同, 需要做一组对象做转换,校验和过滤
- filter_class
- OrderingFilter -- 排序
- SearchFilter -- 搜索
OrderingFilter
- 获取默认的排序字段
- 解析url中的排序参数
- 校验排序字段是否合法
return query.order_by()
SearchFilter
- 校验搜索字段是否合法
- 将搜索字段转换为peewee field
- 将peewee field转换为filter field
- 校验搜索值是否合法
- 将搜索符号转换为 operator
"==": pyoperator.eq,
"!=": pyoperator.ne,
">=": pyoperator.ge,
"<=": pyoperator.le,
">": pyoperator.gt,
"<": pyoperator.lt,
"LIKE": pyoperator.mod,
"ILIKE": pyoperator.pow,
- 持续迭代搜索字段并
query.where(<peewee field> <operator> <request field value>)
具体代码请参考: https://github.com/chaleaoch/flask-filter
<完>